// 用户控制器文件

// 引入用户模型文件
const UserModel = require('../models/userModel')
// 引入jsonwebtoken 身份验证工具
const jsonwebtoken = require('jsonwebtoken')

// 处理注册的控制器
exports.register = async(req, res) => {
    // 获取用户名
    const { username, password, nickname } = req.body
    if(!username) {
        res.send({code: -1, msg: '请输入用户名'})
        return
    }
    if(!password) {
        res.send({code: -1, msg: '请输入密码'})
        return
    }
    if(!nickname) {
        res.send({code: -1, msg: '请输入昵称'})
        return
    }
    // 在数据库查询是否用户名存在
    const data = await UserModel.findOne({username})
    if(data) {
        // 存在，不允许注册
        res.send({code: -1, msg: '该用户名已存在'})
    }else {
        // 不存在
        await UserModel.create(req.body)
        res.send({code: 0, msg: '注册成功'})
    }
}

// 处理登录的控制器
exports.login = async(req, res) => {
    const {username, password} = req.body
    if(!username) {
        res.send({code: -1, msg: '请输入用户名'})
        return
    }
    if(!password) {
        res.send({code: -1, msg: '请输入密码'})
        return
    }
    // 查询数据库
    const data = await UserModel.findOne({username})
    if(!data) {
        res.send({code: -1, msg: '用户名或者密码错误'})
        return
    }
    //
    if (password !== data.password) {
        res.send({code: -1, msg: '用户名或者密码错误'})
        return
    }

    //  用户登录
    // 生成token
    const token = jsonwebtoken.sign(
        {
            userId: data._id,
            nikename: data.nickname
        },
        // 自定义加密字符串
        'DKL',
        {// 过期时间
            expiresIn: '2h'
        }
    )
    res.send({code: 0, msg: '登录成功', token})
}

//  处理获取用户信息的控制器
exports.getInfo = async(req, res) => {
    const {userId} = req.auth
    // 查询数据库
    // { passwod: 0 } 是将 password 字段在返回中剔除掉
    const data = await UserModel.findOne({_id: userId}, {password: 0})

    res.send({
        code: 0,
        msg: '获取用户信息成功',
        data
    })
}